Route Model Binding with Custom Query Constraints


Route model binding with query constraints is used to ensure that only specific models are bound, this will optimize both performance and security.

// Define a route with custom model binding constraint
Route::get('user/{user}', [UserController::class, 'show'])
    ->where('user', '^[0-9]+$');

// Define a custom model binding logic in RouteServiceProvider
public function boot()
{
    parent::boot();

    Route::bind('user', function ($value) {
        return User::where('id', $value)
                    ->where('status', 'active')
                    ->firstOrFail();
    });
}

Route::get('user/{user}', [UserController::class, 'show'])->where('user', '^[0-9]+$'): Defines a route with a custom constraint ensuring the {user} parameter only matches numeric values.

Route::bind('user', function ($value) { ... }): Customizes how the user parameter is resolved. This example adds a constraint that the user must be active, enhancing security and data integrity.

You Might Also Like

Use Lazy Eager Loading for Conditional Relationships

Load related models only when needed using lazy eager loading. This technique helps in optimizing qu...

Handle Dynamic Routes with Parameters and Constraints

To handle dynamic routes with parameters and add constraints to ensure they meet specific requiremen...